﻿using HCQ2_Model;
using HCQ2_Model.DocModel;
using HCQ2_Model.DocModel.APIModel;
using HCQ2_Model.DocModel.APIResultModel;
using HCQ2_Model.TreeModel;
using HCQ2_Model.VLine.InputDto;
using HCQ2_Model.VLine.Params;
using HCQ2_Model.VR.Model;
using HCQ2_Model.VR.Params;
using HCQ2_Model.VRDD.OutputDto._0730;
using HCQ2_Model.VRQDMeta.InputDto._20220418;
using HCQ2_Model.VRQDMeta.OutputDto._20220418;
using System.Collections.Generic;

namespace HCQ2_IBLL
{
    public partial interface IT_DocumentFolderBLL
    {
        /// <summary>
        ///  获取元宇宙素材目录导航
        /// </summary>
        /// <param name="param"></param>
        /// <returns></returns>
        List<QDMaterialTreeOutput> GetQDMaterialTreeData(QDMaterialTreeInput param);
        /// <summary>
        ///  获取元宇宙城市目录导航
        /// </summary>
        /// <param name="param"></param>
        /// <returns></returns>
        List<QDCityTreeOutput> GetQDCityTreeData(QDMaterialTreeInput param);
        /// <summary>
        ///  根据用户获取文档结构树
        /// </summary>
        /// <param name="pageType">页面参数</param>
        /// <param name="doc_type">节点类型</param>
        /// <param name="folder_path">需要被排除的path及子目录</param>
        /// <returns></returns>
        List<DocTreeModel> GetDocTreeData(string pageType, int doc_type, int isNum, bool notType = false, bool isApprove = false, string folder_path = "",int vrType=0);
        /// <summary>
        ///  根据用户获取文档结构树
        ///  VRPPT：1
        ///  创客：2
        ///  头记：3
        ///  校史馆：4
        /// </summary>
        /// <param name="pro_type">产品类型</param>
        /// <param name="folder_path">需要被排除的path及子目录</param>
        /// <returns></returns>
        List<DocTreeModel> GetDocTreeData(int pro_type, int isNum, bool notType = false,string folder_path="", int vrType = 0);
        /// <summary>
        ///  获取商城树
        /// </summary>
        /// <returns></returns>
        List<VRClientTreeModel> GetDocTreeAPIData(EmpowerTree param,int user_id);
        /// <summary>
        ///  获取目录路径列表
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        List<DocLevelTree> GetFolderPathList(DocLevelTreeParam model);
        /// <summary>
        ///  获取商城树相关统计
        /// </summary>
        /// <returns></returns>
        List<TreeDataStatisticsNode> GetTreeStatistics(EmpowerTree param, int user_id);
        /// <summary>
        ///  添加节点
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        int AddNode(DocTreeModel model);
        /// <summary>
        ///  添加系统节点
        /// </summary>
        /// <param name="folder"></param>
        /// <returns></returns>
        DocTreeModel AddSysNode(DocTreeModel folder);
        /// <summary>
        ///  编辑节点
        /// </summary>
        /// <param name="id"></param>
        /// <param name="name"></param>
        /// <returns></returns>
        int EditNode(int id,string name,int proType,int folder_order,string group_name,int if_private,int if_limit,int is_share);
        /// <summary>
        ///  编辑系统节点
        /// </summary>
        /// <param name="folder"></param>
        /// <returns></returns>
        DocTreeModel EditSysNode(DocTreeModel folder);
        /// <summary>
        ///  删除节点
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        int DeleteNode(T_DocumentFolder model,int id);
        /// <summary>
        ///  获取子目录
        /// </summary>
        /// <param name="id"></param>
        /// <param name="type"></param>
        /// <returns></returns>
        List<TreeTableAttribute> GetMenuDataByPid(int id, string type,string sm_code);
        /// <summary>
        ///  根据商品id获取目录信息
        /// </summary>
        /// <param name="file_id"></param>
        /// <returns></returns>
        T_DocumentFolder GetFolderByFileId(int file_id);
        /// <summary>
        ///  获取目录以及子目录下课件数量，判断是否允许删除目录
        /// </summary>
        /// <param name="folderPath"></param>
        /// <returns></returns>
        int GetFolderFileNum(string folderPath);
        /// <summary>
        ///  获取目录详情
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        ResultFolderDetials GetFoldersDetail(FolderDetialModel model, string folder_path);
        /// <summary>
        ///  获取用户收藏目录列表
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        List<CollectFolderResult> GetUserFolderCollectList(CollectFolderList model);
        /// <summary>
        ///  获取用户权限内可看目录
        /// </summary>
        /// <param name="user_id"></param>
        /// <returns></returns>
        List<T_DocumentFolder> GetUserFolderPermiss(int user_id);
        /// <summary>
        ///  获取用户关注目录排行
        /// </summary>
        /// <param name="param"></param>
        /// <param name="user_id"></param>
        /// <returns></returns>
        List<UserFolderRank> GetUserStarFolderRank(FavoriteRankParam param, int user_id);
        /// <summary>
        ///  获取用户关注作品排行
        /// </summary>
        /// <param name="param"></param>
        /// <param name="user_id"></param>
        /// <returns></returns>
        List<UserWorkStar> GetUserStarWorkRank(FavoriteRankParam param, int user_id);
        /// <summary>
        ///  获取作品下载排行
        /// </summary>
        /// <param name="param"></param>
        /// <param name="user_id"></param>
        /// <returns></returns>
        List<UserWorkStar> GetWorkDownloadRank(FavoriteRankParam param, int user_id);
        /// <summary>
        ///  获取作品学习排行
        /// </summary>
        /// <param name="param"></param>
        /// <param name="user_id"></param>
        /// <returns></returns>
        List<UserWorkStar> GetWorkLearnRank(FavoriteRankParam param, int user_id);
        /// <summary>
        ///  获取用户学习排行
        /// </summary>
        /// <param name="param"></param>
        /// <param name="user_id"></param>
        /// <returns></returns>
        List<UserLearnRank> GetUserLearnRank(FavoriteRankParam param, int user_id);
        /// <summary>
        ///  获取用户答题正确率
        /// </summary>
        /// <param name="param"></param>
        /// <param name="user_id"></param>
        /// <returns></returns>
        List<UserAccuracyRank> GetUserOkAccuracyRank(FavoriteRankParam param, int user_id);
        /// <summary>
        ///  获取错题目排行
        /// </summary>
        /// <param name="param"></param>
        /// <param name="user_id"></param>
        /// <returns></returns>
        List<LinesErrorRank> GetLinesErrorRank(FavoriteRankParam param, int user_id);
        /// <summary>
        ///  验证pid是否属于folder_path的只目录
        /// </summary>
        /// <param name="fodler_path"></param>
        /// <param name="pid"></param>
        /// <returns></returns>
        int CheckParentTree(string folder_path, int pid);
        /// <summary>
        ///  判断当前目录下是否有子目录
        /// </summary>
        /// <param name="folder_path"></param>
        /// <returns></returns>
        int CheckIsChild(string folder_path);
        /// <summary>
        ///  判断当前目录是否有课件
        /// </summary>
        /// <param name="folder_id"></param>
        /// <returns></returns>
        int CheckIsWorks(int folder_id);

        //******************************************VLions接口需求规格-20200622需求********************************
        /// <summary>
        ///  获取作品数
        /// </summary>
        /// <param name="dto"></param>
        /// <returns></returns>
        int GetWorkNum(WorkNumInputDto dto);
        /// <summary>
        ///  获取目录数
        /// </summary>
        /// <param name="dto"></param>
        /// <returns></returns>
        int GetFolderNum(FolderNumInputDto dto);
        /// <summary>
        ///  获取上课人数
        /// </summary>
        /// <param name="dto"></param>
        /// <returns></returns>
        int GetLearnNum(LearnClassNumInputDto dto);
        /// <summary>
        ///  获取直播课堂数
        /// </summary>
        /// <param name="dto"></param>
        /// <returns></returns>
        int GetLinesClassNum(LearnClassNumInputDto dto);
        /// <summary>
        ///  获取我的店铺
        /// </summary>
        /// <param name="param"></param>
        /// <returns></returns>
        List<MyFloderModel> GetMyFloderList(MyFloderParam param, int user_id);
        /// <summary>
        ///  获取所有店铺
        /// </summary>
        /// <param name="param"></param>
        /// <returns></returns>
        List<MyFloderModel> GetAllFloderList(AllFloderParam param,int user_id);
        /// <summary>
        ///  获取我的课程（目录）列表
        /// </summary>
        /// <param name="param"></param>
        /// <returns></returns>
        List<OutputMyCourse> GetMyCourseList(MyCourseParam param, int user_id);
    }
}